/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Bitacora;

import SubsistemaPaciente.*;
import clienteSandraParada.Login;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 * El objetivo de esta clase es poder listar y mostrar al usuario todos los registros de bitacora
 * realizado dentro del sistema
 * @author Rodrigo
 */
public class Bitacora extends javax.swing.JPanel {

    DialogoInfoBitacora dib = new DialogoInfoBitacora(null, true, this);

    /**
     * constructor de la clase
     */
    public Bitacora() {
        initComponents();
        this.inicializarFechas();
        this.actualizarTablaFiltro();
        this.ocultarColumnaID();
        this.keyListenerBuscar();
        this.MouseListenerTabla();

        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (!p.isFiltrarRegistro()) {
            desde.setEnabled(false);
            hasta.setEnabled(false);
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel5 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        jScrollPane4 = new javax.swing.JScrollPane();
        tablaBitacora = new javax.swing.JTable();
        buscar = new javax.swing.JTextField();
        desde = new com.toedter.calendar.JDateChooser();
        hasta = new com.toedter.calendar.JDateChooser();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jPanel6 = new javax.swing.JPanel();
        etiquetaMensajeria = new javax.swing.JLabel();
        jPanel7 = new javax.swing.JPanel();
        botonVerPaciente = new javax.swing.JButton();

        setPreferredSize(new java.awt.Dimension(953, 603));

        jPanel5.setBackground(new java.awt.Color(255, 255, 255));
        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Bitácora", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP, new java.awt.Font("Tahoma", 0, 36))); // NOI18N

        jLabel4.setText("Buscar ");

        tablaBitacora.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "ID", "Rut", "Nombre", "Módulo", "Acción", "Fecha", "Hora"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                true, false, false, false, false, false, true
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaBitacora.getTableHeader().setReorderingAllowed(false);
        jScrollPane4.setViewportView(tablaBitacora);

        buscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buscarActionPerformed(evt);
            }
        });

        desde.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                desdePropertyChange(evt);
            }
        });

        hasta.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                hastaPropertyChange(evt);
            }
        });

        jLabel1.setText("Hasta:");

        jLabel2.setText("Desde:");

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
                .addComponent(jLabel2)
                .addGap(18, 18, 18)
                .addComponent(desde, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(44, 44, 44)
                .addComponent(jLabel1)
                .addGap(18, 18, 18)
                .addComponent(hasta, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 354, Short.MAX_VALUE)
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(buscar, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 943, Short.MAX_VALUE)
        );
        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(buscar)
                        .addComponent(jLabel4))
                    .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(hasta, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(desde, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 360, Short.MAX_VALUE)
                .addGap(59, 59, 59))
        );

        jPanel6.setBackground(new java.awt.Color(255, 255, 255));

        etiquetaMensajeria.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        etiquetaMensajeria.setText("Área de mensajería");

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(etiquetaMensajeria, javax.swing.GroupLayout.DEFAULT_SIZE, 953, Short.MAX_VALUE)
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(etiquetaMensajeria, javax.swing.GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE)
        );

        jPanel7.setBackground(new java.awt.Color(255, 255, 255));

        botonVerPaciente.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Previsualizar.png"))); // NOI18N
        botonVerPaciente.setText("Ver");
        botonVerPaciente.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        botonVerPaciente.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonVerPaciente.setMaximumSize(new java.awt.Dimension(97, 43));
        botonVerPaciente.setMinimumSize(new java.awt.Dimension(97, 43));
        botonVerPaciente.setPreferredSize(new java.awt.Dimension(97, 43));
        botonVerPaciente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonVerPacienteActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel7Layout.createSequentialGroup()
                .addContainerGap(823, Short.MAX_VALUE)
                .addComponent(botonVerPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        jPanel7Layout.setVerticalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel7Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(botonVerPaciente, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
    }// </editor-fold>//GEN-END:initComponents

    /**
     *@method  metodo que se encarga de oir los eventos de la tabla, en simples palabras al realizar doble click
     * en la tabla se mostrara los datos pedidos
     */
    public void MouseListenerTabla() {
        this.tablaBitacora.addMouseListener(new MouseListener() {

            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                    service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                    if (p.isVerRegistro()) {
                        normalizarEtiquetaMensajeria();
                        if (tablaBitacora.getSelectedRow() == -1) {
                            cambiarEtiquetaMensajeria("Debe seleccionar un Registro para verlo", Color.red);
                        } else {
                            dib.normalizarMensajeria();
                            dib.setLocationRelativeTo(null);
                            dib.setTitle("Ver Bitácora");
                            dib.getBotonAceptar().setText("Exportar");
                            dib.getBotonAceptar().setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/pdf.png")));
                            dib.getBotonCancelar().setText("Cancelar");
                            service.Bitacora b = (service.Bitacora) cargarBitacora((Long.parseLong((String) tablaBitacora.getValueAt(tablaBitacora.getSelectedRow(), 0))));
                            dib.llenarCampos(b);
                            dib.inhabilitarCampos();
                            dib.setVisible(true);
                        }
                    } else {
                        JOptionPane.showMessageDialog(null, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                    }

                }
            }

            @Override
            public void mousePressed(MouseEvent e) {
            }

            @Override
            public void mouseReleased(MouseEvent e) {
            }

            @Override
            public void mouseEntered(MouseEvent e) {
            }

            @Override
            public void mouseExited(MouseEvent e) {
            }
        });
    }
    /*
     *@method evento del teclado que actualiza la tabla cada vez que se introduce un caracter en el campo busqueda
     */

    public void keyListenerBuscar() {
        this.buscar.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
                //realizo busqueda dinamica
            }

            @Override
            public void keyPressed(KeyEvent e) {
            }

            @Override
            public void keyReleased(KeyEvent e) {
                if (!buscar.getText().equals("")) {
                    actualizarTablaBusqueda(buscar.getText());
                } else {
                    actualizarTablaFiltro();
                }
            }
        });
    }

    /**
     *@method evento del boton ver una bitacora
     * @param evt
     */
    private void botonVerPacienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonVerPacienteActionPerformed
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (p.isVerRegistro()) {
            normalizarEtiquetaMensajeria();
            if (tablaBitacora.getSelectedRow() == -1) {

                cambiarEtiquetaMensajeria("Debe seleccionar un Registro para verlo", Color.red);
            } else {
                dib.normalizarMensajeria();
                dib.setLocationRelativeTo(null);
                dib.setTitle("Ver Bitácora");
                dib.getBotonAceptar().setText("Exportar");
                dib.getBotonAceptar().setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/pdf.png")));
                dib.getBotonCancelar().setText("Cancelar");
                service.Bitacora b = (service.Bitacora) cargarBitacora((Long.parseLong((String) tablaBitacora.getValueAt(tablaBitacora.getSelectedRow(), 0))));
                dib.llenarCampos(b);
                dib.inhabilitarCampos();
                dib.setVisible(true);
            }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
}//GEN-LAST:event_botonVerPacienteActionPerformed
    /*
     *@method evento del jcalendar desde, se encarga de filtrar los registro desde esa fecha hacia adelante
     */
    private void desdePropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_desdePropertyChange
        // TODO add your handling code here:
        // if muy necesario ya que al momento de setear una fecha dentro del codigo llama de imediato a este
        //metodo por lo tanto si se setea solo uno va  a tomar el otro null y se caera el programa
        this.cambiarEtiquetaMensajeria("Área de Mensajería ", Color.black);
        if (this.desde.getDate() != null && this.hasta.getDate() != null) {
            if (this.desde.getDate().after(this.hasta.getDate())) {
                this.cambiarEtiquetaMensajeria("Rango de fechas erróneas", Color.red);
            }
            if (!buscar.getText().equals("")) {
                actualizarTablaBusqueda(buscar.getText());
            } else {
                actualizarTablaFiltro();
            }
        }
    }//GEN-LAST:event_desdePropertyChange
    /*
     * @method evento hasta se encarga de filtrar los registro hasta esa fecha e inclusive
     */
    private void hastaPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_hastaPropertyChange
        // TODO add your handling code here:
        this.cambiarEtiquetaMensajeria("Área de Mensajería ", Color.black);
        if (this.desde.getDate() != null && this.hasta.getDate() != null) {
            if (this.desde.getDate().after(this.hasta.getDate())) {
                this.cambiarEtiquetaMensajeria("Rango de fechas erróneas", Color.red);
            }
            if (!buscar.getText().equals("")) {
                actualizarTablaBusqueda(buscar.getText());
            } else {
                actualizarTablaFiltro();
            }
        }
    }//GEN-LAST:event_hastaPropertyChange

    private void buscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscarActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_buscarActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonVerPaciente;
    private javax.swing.JTextField buscar;
    private com.toedter.calendar.JDateChooser desde;
    private javax.swing.JLabel etiquetaMensajeria;
    private com.toedter.calendar.JDateChooser hasta;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JTable tablaBitacora;
    // End of variables declaration//GEN-END:variables

    /**
     *@method método que borra todas las filas de la tablaPacientes
     */
    public void limpiarTabla() {
        DefaultTableModel temp = (DefaultTableModel) tablaBitacora.getModel();
        for (int i = tablaBitacora.getRowCount() - 1; i >= 0; i--) {
            temp.removeRow(i);
        }
    }

    /**
     *@method método que recoge los pacientes desde la base de datos y actualiza la tablaPacientes
     */
    public void actualizarTabla() {
        this.limpiarTabla();
        java.util.List<service.Bitacora> bitacoras = listarBitacora();
        int i = 0;
        for (service.Bitacora b : bitacoras) {

            this.agregarFila();
            tablaBitacora.setValueAt(b.getId().toString(), i, 0);
            tablaBitacora.setValueAt(b.getRut(), i, 1);
            tablaBitacora.setValueAt(b.getNombre(), i, 2);
            tablaBitacora.setValueAt(b.getModulo(), i, 3);
            tablaBitacora.setValueAt(b.getAccion(), i, 4);
            tablaBitacora.setValueAt(b.getFecha(), i, 5);
            tablaBitacora.setValueAt(b.getHora(), i, 6);
            i++;

        }
    }
    /*
     *@method metodo que se encarga de realizar el filtro en la tabla con la palabra y fecha buscada
     */

    public void actualizarTablaFiltro() {
        this.limpiarTabla();
        java.util.List<service.Bitacora> bitacoras = listarBitacora();
        int i = 0;
        for (service.Bitacora b : bitacoras) {
            Date d = this.stringToDate(b.getFecha());
            if (this.desde.getDate().before(d) && this.hasta.getDate().after(d) || this.esMismoDia(this.desde.getDate(), d)
                    || this.esMismoDia(this.hasta.getDate(), d)) {

                this.agregarFila();
                tablaBitacora.setValueAt(b.getId().toString(), i, 0);
                tablaBitacora.setValueAt(b.getRut(), i, 1);
                tablaBitacora.setValueAt(b.getNombre(), i, 2);
                tablaBitacora.setValueAt(b.getModulo(), i, 3);
                tablaBitacora.setValueAt(b.getAccion(), i, 4);
                tablaBitacora.setValueAt(b.getFecha(), i, 5);
                tablaBitacora.setValueAt(b.getHora(), i, 6);
                i++;
            }

        }
    }
    /*
     *@method inicializa los jcalendar desde y hasta
     */

    public void inicializarFechas() {
        Date fechaHoy = Calendar.getInstance().getTime();
        this.desde.setDate(fechaHoy);
        this.hasta.setDate(fechaHoy);
    }
    /*
     * @method convierte un string a date
     */

    public Date stringToDate(String strFecha) {
        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("dd-MM-yyyy");
        Date fecha = null;
        try {
            fecha = formatoDelTexto.parse(strFecha);
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
        return fecha;
    }
    /*
     *@method busca dentro de la tabla de bitacora
     */

    public void actualizarTablaBusqueda(String buscar) {
        this.limpiarTabla();
        Gson gson = new Gson();
        String json = buscarBitacora(buscar);
        List<service.Bitacora> bitacoras = gson.fromJson(json, new TypeToken<List<service.Bitacora>>() {
        }.getType());
        int i = 0;
        for (service.Bitacora b : bitacoras) {
            Date d = this.stringToDate(b.getFecha());
            if (this.desde.getDate().before(d) && this.hasta.getDate().after(d) || esMismoDia(desde.getDate(), d)
                    || esMismoDia(hasta.getDate(), d)) {
                this.agregarFila();
                tablaBitacora.setValueAt(b.getId().toString(), i, 0);
                tablaBitacora.setValueAt(b.getRut(), i, 1);
                tablaBitacora.setValueAt(b.getNombre(), i, 2);
                tablaBitacora.setValueAt(b.getModulo(), i, 3);
                tablaBitacora.setValueAt(b.getAccion(), i, 4);
                tablaBitacora.setValueAt(b.getFecha(), i, 5);
                tablaBitacora.setValueAt(b.getHora(), i, 6);
                i++;
            }

        }
    }
    /*
     *@method se en carga de verificar si dos fechas son iguales
     * @return boolean true si son iguales o false si son diferentes
     */

    private static boolean esMismoDia(Date fecha1, Date fecha2) {
        if (fecha1 == null || fecha2 == null) {
            throw new IllegalArgumentException("Las fechas no pueden ser null");
        }
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(fecha1);
        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(fecha2);
        return isSameDay(cal1, cal2);
    }
    /*
     * se en carga de verificar si dos calendar son iguales
     * @return boolean true si son iguales o false si son diferentes
     */

    private static boolean isSameDay(Calendar cal1, Calendar cal2) {
        if (cal1 == null || cal2 == null) {
            throw new IllegalArgumentException("Las fechas no pueden ser null");
        }
        return (cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA) && cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR));
    }
    /*
     *@method oculta la columna id de la tabla
     */

    public void ocultarColumnaID() {
        tablaBitacora.getColumnModel().getColumn(0).setMaxWidth(0);
        tablaBitacora.getColumnModel().getColumn(0).setMinWidth(0);
        tablaBitacora.getColumnModel().getColumn(0).setPreferredWidth(0);
    }

    /**
     *@method método que agrega filas a la tablaPacientes
     */
    public void agregarFila() {
        DefaultTableModel temp = (DefaultTableModel) tablaBitacora.getModel();
        Object nuevo[] = {"", "", "", "", "", "", ""};
        temp.addRow(nuevo);
    }

    /**
     * @method cambia el jlabell mensajeria
     * @param mensaje mensaje a mostrar
     * @param color coloar a cual cambiar
     */
    public void cambiarEtiquetaMensajeria(String mensaje, Color color) {
        etiquetaMensajeria.setText(mensaje);
        etiquetaMensajeria.setForeground(color);
    }

    /**
     * @method que se encarga de volver al estado original del mensaje
     */
    public void normalizarEtiquetaMensajeria() {
        etiquetaMensajeria.setText("Área de mensajería");
        etiquetaMensajeria.setForeground(Color.BLACK);
    }

    private static java.util.List<service.Bitacora> listarBitacora() {
        service.BitacoraWSService service = new service.BitacoraWSService();
        service.BitacoraWS port = service.getBitacoraWSPort();
        return port.listarBitacora();
    }

    private static Object cargarBitacora(java.lang.Long rut) {
        service.BitacoraWSService service = new service.BitacoraWSService();
        service.BitacoraWS port = service.getBitacoraWSPort();
        return port.cargarBitacora(rut);
    }

    private static String buscarBitacora(java.lang.String buscar) {
        service.BitacoraWSService service = new service.BitacoraWSService();
        service.BitacoraWS port = service.getBitacoraWSPort();
        return port.buscarBitacora(buscar);
    }

    private static Object cargarPrivilegios(java.lang.String rut) {
        service.PrivilegiosWS_Service service = new service.PrivilegiosWS_Service();
        service.PrivilegiosWS port = service.getPrivilegiosWSPort();
        return port.cargarPrivilegios(rut);
    }
}
